home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / amiexpress / source / doors / shell / shell.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-12-26  |  36.8 KB  |  1,908 lines

  1. #include <exec/types.h>
  2. #include "exec/memory.h"
  3. #include <libraries/dos.h>
  4. #include <libraries/dosextens.h>
  5. #include <libraries/filehandler.h>
  6. #include <time.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include "dh1:source/doors/romconf/doorheader.h"
  10.  
  11. #define SM sendmessage
  12. #define sm sendmessage
  13. #define hk hotkey
  14. #define pm prompt
  15. #define gu getuserstring
  16. #define pu putuserstring
  17.  
  18. int Ok, NO, REN, DEL, CAN, COP, CONLY;
  19. int EN, CD, SR, FI, A, CHD, RZ, DZ;
  20. int f, i, j, l, q, r, w, z, p;
  21.  
  22. extern struct FileLock *Lock(), *ParentDir(), *CurrentDir();
  23. extern struct DosLibrary *DOSBase;
  24.  
  25. char    filename[20][100];
  26. char     filenum[15];
  27. char        node[3];
  28. char        CDIR[200];
  29. char        line[200];
  30. char       image[200];
  31. char    password[200];
  32. char DELpassword[200];
  33. char RENpassword[200];
  34. char        name[200];
  35. char         CLI[200];
  36. char        CLI2[200];
  37. char         CMD[200];
  38. char        CMD2[200];
  39. char         EXP[200];
  40. char        UEXP[200];
  41. char         DIR[200];
  42. char        ROOT[200];
  43. char        PATH[200];
  44. char        DIRA[200];
  45. char        DIRB[200];
  46. char       ROOTB[200];
  47. char       PATHB[200];
  48. char         wrd[200];
  49. char        left[200];
  50. char       right[200];
  51. char     TempDir[200];
  52. char       codea[120];
  53. char       codeb[120];
  54. char       codec[120];
  55. char       coded[120];
  56. char       codee[120];
  57. char       codef[120];
  58. char       codeg[120];
  59.  
  60. FILE *fi;
  61.  
  62. void sr(char *str);
  63. void Check_Files();
  64. void Password_Check();
  65. void Name_Check();
  66. void Init_Directory();
  67. void Main_Sub();
  68. void Parse_Arg(char *str);
  69. void Upper(char *str);
  70. void ShutDown();
  71. void end();
  72. void LastCommand();
  73. void Get_Dir(char *Directory);
  74. void LastPos(char *c,char *s);
  75. void Word(char *str,int n);
  76. void Words(char *str);
  77. void NOT_Check();
  78. void Left(char *str,int n);
  79. void Right(char *str,int n);
  80. void DEL_REN_Password_Check();
  81. void Show();
  82. void CurrentDIR();
  83. void Dir_Check(char *Path);
  84. void File_Check(char *Path);
  85. void Change_Dir();
  86. void Intro();
  87. void Get_Files();
  88. void List_Files();
  89. void Download_Files();
  90. void Check_File();
  91. void Get_Code();
  92. void Check_Version();
  93. STRPTR BstrOut(BSTR *bstr);
  94. int FindAssign(char *Path);
  95.  
  96. main(int argc,char *argv[])
  97. {
  98.  
  99.   if(argc!=2)
  100.   {
  101.     printf("SHELL v3.0 Written By: /X\altese Falcon \n");
  102.     printf("This is an AmiExpress 2.1+ interface.\n");
  103.     printf("\n\n");
  104.     exit(0);
  105.   }
  106.  
  107.   Register(argv[1][0]-'0'); /* register with express */
  108.  
  109.   Get_Code();
  110.   Check_Files();
  111.   Intro();
  112.   //Check_Version();
  113.   Password_Check();
  114.   Name_Check();
  115.   Init_Directory();
  116.   Main_Sub();
  117.   ShutDown();
  118.   end();
  119. }
  120.  
  121. void Check_Version()
  122. {
  123.  gu(image,EXPRESS_VERSION);
  124.  Right(image,3);
  125.  i=atoi(right);
  126.  if(i<2)
  127.    {
  128.     sm("",1);
  129.     sm("                AmiExpress Version 2.0+ Required For This Shell",1);
  130.     sm("",1);
  131.     ShutDown();
  132.     end();
  133.    }
  134. }
  135.  
  136. void Check_Files()
  137. {
  138.  struct FileLock *testlock;
  139.  fi=fopen("DOORS:SHELL/SHELL-ENV","r");
  140.  if(fi==0) 
  141.    {
  142.     sm("",1);
  143.     sm("SHELL-ENV Required To Use Shell v3.0",1);
  144.     sm("",1);
  145.     ShutDown();
  146.     end();
  147.    }
  148.    else
  149.        {
  150.         fgets(password,200,fi);
  151.         sr(password);
  152.         fgets(DELpassword,200,fi);
  153.         sr(DELpassword);
  154.         fgets(RENpassword,200,fi);
  155.         sr(RENpassword);
  156.         fclose(fi);
  157.        }
  158.         
  159.  testlock=Lock("DOORS:SHELL/SHELL-NOT",ACCESS_READ);
  160.  if(testlock==0) 
  161.   {
  162.    sm("",1);
  163.    sm("SHELL-NOT Required To Use Shell v3.0",1);
  164.    sm("",1);
  165.    ShutDown();
  166.    end();
  167.   }
  168.   else UnLock(testlock);
  169.  
  170.  testlock=Lock("DOORS:SHELL/SHELL-NAMES",ACCESS_READ);
  171.  if(testlock==0) 
  172.   {
  173.    sm("",1);
  174.    sm("SHELL-NAMES Required To Use Shell v3.0",1);
  175.    sm("",1);
  176.    ShutDown();
  177.    end();
  178.   }
  179.   else UnLock(testlock);
  180.  
  181.  testlock=Lock("DOORS:SHELL/SHELL-CAN",ACCESS_READ);
  182.  if(testlock==0)
  183.    {
  184.     sm("",1);
  185.     sm("SHELL-CAN Required To Use Shell v3.0",1);
  186.     sm("",1);
  187.     ShutDown();
  188.     end();
  189.    }
  190.   else UnLock(testlock);
  191.  
  192.  testlock=Lock("DOORS:SHELL/SHELL-COP_NOT",ACCESS_READ);
  193.  if(testlock==0)
  194.    {
  195.     sm("",1);
  196.     sm("SHELL-COP_NOT Required To Use Shell v3.0",1);
  197.     sm("",1);
  198.     ShutDown();
  199.     end();
  200.    }
  201.   else UnLock(testlock);
  202.  
  203.  testlock=Lock("DOORS:SHELL/SHELL-DEL_NOT",ACCESS_READ);
  204.  if(testlock==0)
  205.    {
  206.     sm("",1);
  207.     sm("SHELL-DEL_NOT Required To Use Shell v3.0",1);
  208.     sm("",1);
  209.     ShutDown();
  210.     end();
  211.    }
  212.   else UnLock(testlock);
  213.  
  214.  testlock=Lock("DOORS:SHELL/SHELL-REN_NOT",ACCESS_READ);
  215.  if(testlock==0)
  216.    {
  217.     sm("",1);
  218.     sm("SHELL-REN_NOT Required To Use Shell v3.0",1);
  219.     sm("",1);
  220.     ShutDown();
  221.     end();
  222.    }
  223.   else UnLock(testlock);
  224.  
  225.  return;
  226. }
  227.  
  228. void LastPos(char *c,char *s)
  229. {
  230.   j=0;
  231.   r=strlen(s);
  232.   while(r > -1)
  233.   {
  234.     if(!strncmp(s+r,c,strlen(c)))
  235.       {
  236.        j=r+1;
  237.        break;
  238.       }
  239.     else r--;
  240.   }
  241.  
  242. }
  243.  
  244. void Password_Check()
  245. {
  246.  sm("",1);
  247.  sm("Password: ",0);
  248.  strcpy(image,"");
  249.  i=0;
  250.  while(i<69)
  251.   {
  252.    hk("",&image[i]);
  253.    if(image[i]==13) break;
  254.    if(image[i]!=8) {sm("X",0); i++;}
  255.    else
  256.        {
  257.         if(i!=0) {sm(" ",0); i--;}
  258.        }
  259.   }
  260.  image[i]='\0';
  261.  sm("",1);
  262.  if(strcmp(password,image)!=0)
  263.    {
  264.     sm("",1);
  265.     sm("Password FAILED !!!",1);
  266.     sm("",1);
  267.     ShutDown();
  268.     end();
  269.    }
  270.  return;
  271. }
  272.  
  273. void Name_Check()
  274. {
  275.  gu(name,DT_NAME);                              /* Do Search Effect */
  276.  sm("",1);
  277.  sm("Searching for ",0);
  278.  sm(name,0);
  279.  sm(" ",0);
  280.  z = 6;
  281.  while(z != 0)
  282.  {
  283.   Delay(40);
  284.   sm("",0);
  285.   z --;
  286.  }                                              /* End Search Effect */
  287.  Ok=0;
  288.  fi=fopen("DOORS:SHELL/SHELL-NAMES","r");
  289.  while(fgets(image,200,fi)!=NULL)
  290.  {
  291.   sr(image);
  292.   if(strcmp(name,image)==0) Ok=1;
  293.  }
  294.  fclose(fi);
  295.  
  296.  if(Ok==1)
  297.    {
  298.     sm("ACCESS Granted",1);
  299.    }
  300.    else
  301.        {
  302.         sm("ACCESS DENIED !!!",1);
  303.         sm("",1);
  304.         ShutDown();
  305.         end();
  306.        }
  307.  return;
  308. }
  309.  
  310. void sr(char *str)
  311. {
  312.  r=0; j=0;
  313.  while(r < strlen(str) && str[r]==' ') {r++;}
  314.  while(r < strlen(str))
  315.  {
  316.   str[j] = str[r];
  317.   r++; j++;
  318.  }
  319.  str[j] = '\0';
  320.  
  321.  r = strlen(str) - 1;
  322.  while(r > -1)
  323.  {
  324.   if(*(str + r) <= 32) *(str + r) = '\0'; else break;
  325.   r--;
  326.  }
  327. }
  328.  
  329. void Upper(char *str)
  330. {
  331.  l=strlen(str);
  332.  for(i=0; i<l; i++) if(str[i]>='a' && str[i]<='z') str[i]=str[i]-32;
  333.  str[i]='\0';
  334.  return;
  335. }
  336.  
  337. void Init_Directory()
  338. {
  339.  Get_Dir("BBS:");
  340. }
  341.  
  342. void Parse_Arg(char *str)
  343. {
  344.  i=0;j=0;w=0;
  345.  while(i<strlen(str))
  346.  {
  347.   if(str[i]==' ') j++;
  348.   i++;
  349.  }
  350.  j++;
  351.  if(j==1) { strcpy(CMD,str); strcpy(EXP,""); return; }
  352.  i=0;j=1;w=0;
  353.  while(j==1)
  354.  {
  355.   if(str[i]==' ') { CMD[i]='\0'; j++;} 
  356.   else CMD[i]=str[i];
  357.   i++;
  358.  }
  359.  while(i<strlen(str))
  360.  {
  361.   EXP[w]=str[i];
  362.   w++; i++;
  363.  }
  364.  EXP[w]='\0';
  365. }
  366.  
  367. void LastCommand()
  368. {
  369.  pu("",RETURNCOMMAND);
  370.  return;
  371. }
  372.  
  373. void end()
  374. {
  375.   exit(0);
  376. }
  377.  
  378. void Get_Dir(char *Directory)
  379. {
  380.  struct FileLock *oldlock;
  381.  j=strlen(Directory); if(j>29) Directory[30]='\0';
  382.  oldlock = Lock(Directory,ACCESS_READ);
  383.  if(oldlock) followpath(oldlock,0);
  384.  else
  385.      {
  386.       sm("",1);
  387.       sm("Directory Does NOT EXIST!",1);
  388.      }
  389.  return;
  390. }
  391.  
  392. int followpath(lock,slash)
  393. struct FileLock *lock;
  394. int slash;
  395. {
  396.  struct FileInfoBlock *fib;
  397.  struct FileLock *newlock;
  398.  int success;
  399.  
  400.  if(!lock) return(0);
  401.  strcpy(ROOT,""); strcpy(PATH,"");
  402.  strcpy(ROOTB,""); strcpy(PATHB,"");
  403.  fib=(struct FileInfoBlock *)AllocMem(sizeof(struct FileInfoBlock),MEMF_CLEAR);
  404.  newlock=ParentDir(lock);
  405.  followpath(newlock,1);
  406.  
  407.  success = Examine(lock,fib);
  408.  if(success) sprintf(DIR,"%ls",&fib->fib_FileName[0]); 
  409.  if(newlock==0)
  410.    {
  411.     sprintf(ROOT,"%s:",DIR);
  412.     sprintf(ROOTB,"%s:",DIR);
  413.    }
  414.    else 
  415.        {
  416.         if(slash)
  417.           {
  418.            sprintf(PATH,"%s%s/",PATH,DIR);
  419.            sprintf(PATHB,"%s%s/",PATHB,DIR);
  420.           }
  421.           else
  422.               {
  423.                sprintf(PATH,"%s%s",PATH,DIR);
  424.                sprintf(PATHB,"%s%s",PATHB,DIR);
  425.               }
  426.         UnLock(lock);
  427.        }
  428.  if(fib) FreeMem(fib,sizeof(struct FileInfoBlock));
  429.  sprintf(DIR,"%s%s",ROOT,PATH);
  430.  sprintf(DIRB,"%s%s",ROOTB,PATHB);
  431.  return(0);
  432. }  
  433.  
  434. void Dir_Check(char *Path)
  435. {
  436.  struct FileInfoBlock *fib;
  437.  struct FileLock *lock;
  438.  int success;
  439.  CD=0;Ok=0;
  440.  
  441.  j=strlen(Path); if(j>29) Path[30]='\0';
  442.  strcpy(image,Path);
  443.  LastPos(":",Path);
  444.  if(j!=0)
  445.    {
  446.     image[j-1]='\0';
  447.     Upper(image);
  448.     if(!FindAssign(image)) {Ok=1; return;}
  449.    }
  450.  fib=(struct FileInfoBlock *)AllocMem(sizeof(struct FileInfoBlock),MEMF_CLEAR);
  451.  lock = Lock(Path,ACCESS_READ);
  452.  if(lock)
  453.    {
  454.     success = Examine(lock,fib);
  455.     if(success) {if(fib->fib_DirEntryType > 0) CD=1;}
  456.     UnLock(lock);
  457.    }
  458.  if(fib) FreeMem(fib,sizeof(struct FileInfoBlock));
  459.  return;
  460. }
  461.  
  462. void File_Check(char *Path)
  463. {
  464.  struct FileInfoBlock *fib;
  465.  struct FileLock *lock;
  466.  int success;
  467.  FI=0;
  468.  
  469.  j=strlen(Path); if(j>29) Path[30]='\0';
  470.  strcpy(image,Path);
  471.  LastPos(":",Path);
  472.  if(j!=0)
  473.    {
  474.     image[j-1]='\0';
  475.     Upper(image);
  476.     if(!FindAssign(image)) return;
  477.    }
  478.  fib=(struct FileInfoBlock *)AllocMem(sizeof(struct FileInfoBlock),MEMF_CLEAR);
  479.  lock = Lock(Path,ACCESS_READ);
  480.  if(lock)
  481.    {
  482.     success = Examine(lock,fib);
  483.     if(success) {if(fib->fib_DirEntryType < 0) FI=1;}
  484.     UnLock(lock);
  485.    }
  486.  if(fib) FreeMem(fib,sizeof(struct FileInfoBlock));
  487.  return;
  488. }
  489.  
  490.  
  491. void Script_Check(char *Path)
  492. {
  493.  struct FileInfoBlock *fib;
  494.  struct FileLock *lock;
  495.  int success;
  496.  SR=0;
  497.  
  498.  fib=(struct FileInfoBlock *)AllocMem(sizeof(struct FileInfoBlock),MEMF_CLEAR);
  499.  
  500.  LastPos("/",Path);
  501.  if(j==0) LastPos(":",Path);
  502.  if(j==0)
  503.    {
  504.     Right(DIRB,1);
  505.     if(strcmp(right,":")==0) sprintf(line,"%s%s",DIRB,Path);
  506.       else sprintf(line,"%s/%s",DIRB,Path);
  507.    }
  508.    else strcpy(line,Path);
  509.  
  510.  j=strlen(Path); if(j>29) Path[30]='\0';
  511.  j=strlen(line); if(j>29) line[30]='\0';
  512.  strcpy(image,Path);
  513.  LastPos(":",Path);
  514.  if(j!=0)
  515.    {
  516.     image[j-1]='\0';
  517.     Upper(image);
  518.     if(!FindAssign(image)) return;
  519.    }
  520.  lock = Lock(line,ACCESS_READ);
  521.  if(lock)
  522.    {
  523.     success = Examine(lock,fib);
  524.     if(success)
  525.     {
  526.      if(fib->fib_DirEntryType < 0)
  527.        {
  528.         if(fib->fib_Protection & FIBF_SCRIPT) SR=1;
  529.        }
  530.     }
  531.     UnLock(lock);
  532.    }
  533.  if(fib) FreeMem(fib,sizeof(struct FileInfoBlock));
  534.  return;
  535. }
  536.    
  537. void Show()
  538. {
  539.  fi=fopen("RAM:SHELL","r");
  540.  if(fi!=0)
  541.    {
  542.     while(fgets(image,200,fi)!=NULL)
  543.     {
  544.      sr(image);
  545.      sm(image,1);
  546.     }
  547.     fclose(fi);
  548.    }
  549. }
  550.  
  551. void Word(char *str, int n)
  552. {
  553.  Words(str);
  554.  if(w<n) {strcpy(wrd,""); return;}
  555.  r=0;j=1;q=0;
  556.  while(j!=n)
  557.  {
  558.   if(str[r]==' ') j++;
  559.   r++;
  560.  }
  561.  while(r<strlen(str) && str[r]!=' ')
  562.  {
  563.   wrd[q]=str[r];
  564.   q++; r++;
  565.  }
  566.  wrd[q]='\0';
  567.  return;
  568. }
  569.  
  570. void Words(char *str)
  571. {
  572.  r=0; w=0;
  573.  while(r < strlen(str))
  574.  {
  575.   if(str[r]==' ') w++;
  576.   r++;
  577.  }
  578.  w++;
  579.  return;
  580. }
  581.  
  582. void Left(char *str,int n)
  583. {
  584.  l=strlen(str);
  585.  if(n<l) l=n; 
  586.  for(r=0; r<l; r++)
  587.  {
  588.   left[r]=str[r];
  589.  }
  590.  left[r]='\0';
  591.  return;
  592. }
  593.  
  594. void Right(char *str,int n)
  595. {
  596.  q=0;
  597.  l=strlen(str);
  598.  if(n>l) n=0;
  599.  else n=l-n;
  600.  for(r=n; r<l; r++)
  601.  {
  602.   right[q]=str[r];
  603.   q++;
  604.  }
  605.  right[q]='\0';
  606.  return;
  607. }
  608.  
  609. void NOT_Check()
  610. {
  611.  fi=fopen("DOORS:SHELL/SHELL-NOT","r");
  612.  if(fi==0)
  613.    {
  614.     sm("",1);
  615.     sm("SHELL-NOT Required To Use Shell v3.0",1);
  616.     sm("",1);
  617.     ShutDown();
  618.     end();
  619.    }
  620.  while(fgets(image,200,fi)!=NULL)
  621.  {
  622.   sr(image); Upper(image);
  623.  
  624.   if(strcmp(image,"#?")==0)
  625.     {
  626.      LastPos(image,CLI);
  627.      if(j!=0) NO=1;
  628.     }
  629.   Words(UEXP); EN=w;
  630.   for(i=1; i<=EN; i++)
  631.   {
  632.    Word(UEXP,i);
  633.    l=strlen(wrd);
  634.    LastPos("/",wrd);
  635.    if(j==0) LastPos(":",wrd);
  636.    if(j!=0) Right(wrd,l-j);
  637.      else strcpy(right,wrd);
  638.    if(strcmp(image,right)==0) NO=1;
  639.   }
  640.    l=strlen(CMD);
  641.    LastPos("/",CMD);
  642.    if(j==0) LastPos(":",CMD);
  643.    if(j!=0) Right(CMD,l-j);
  644.      else strcpy(right,CMD);
  645.    if(strcmp(image,right)==0) NO=1;
  646.  }
  647.  fclose(fi);
  648.  return;
  649. }
  650.    
  651. void CAN_Check()
  652. {
  653.  fi=fopen("DOORS:SHELL/SHELL-CAN","r");
  654.  if(fi==0)
  655.    {
  656.     sm("",1);
  657.     sm("SHELL-CAN Required To Use Shell v3.0",1);
  658.     sm("",1);
  659.     ShutDown();
  660.     end();
  661.    }
  662.  while(fgets(image,200,fi)!=NULL)
  663.  {
  664.   sr(image); Upper(image);
  665.   l=strlen(image);
  666.   LastPos("/",image);
  667.   if(j!=0)
  668.     {
  669.      l=strlen(image); l=l-j;
  670.      Right(image,l);
  671.      j=j-1;
  672.      Left(image,j);
  673.     }
  674.   else
  675.       {
  676.        LastPos(":",image);
  677.        if(j!=0)
  678.          {
  679.           Left(image,j);
  680.           l=strlen(image); l=l-j;
  681.           Right(image,l);
  682.          }
  683.       }
  684.   strcpy(DIRA,DIRB); Upper(DIRA);
  685.   if(strcmp(left,"RAM:")==0 && strcmp(DIRA,"RAM DISK:")==0) strcpy(left,"Ram Disk:");
  686.   if(strcmp(left,"RAM DISK:")==0 && strcmp(DIRA,"RAM:")==0) strcpy(left,"Ram:");
  687.   if(strcmp(right,CMD)==0 && strcmp(left,DIRB)==0) CAN=1;
  688.   Left(image,2);
  689.   if(strcmp(left,"C:")==0)
  690.     {
  691.      if(strcmp(right,CMD)==0)
  692.        {
  693.         CAN=1;
  694.         CONLY=1;
  695.        }
  696.     }
  697.   if(strcmp(image,CMD)==0) CAN=1;
  698.  }
  699.  fclose(fi);
  700.  return;
  701. }
  702.  
  703. void DEL_REN_Password_Check()
  704. {
  705.  sm("",1);
  706.  sm("Password: ",0);
  707.  strcpy(image,"");
  708.  i=0;
  709.  while(i<69)
  710.   {
  711.    hk("",&image[i]);
  712.    if(image[i]==13) break;
  713.    if(image[i]!=8) {sm("X",0); i++;}
  714.    else
  715.        {
  716.         if(i!=0) {sm(" ",0); i--;}
  717.        }
  718.   }
  719.  image[i]='\0';
  720.  sm("",1);
  721.  if(strcmp(password,image)==0) Change_Dir();
  722.  else sm("Password Failed",1);
  723.  return;
  724. }
  725.  
  726. void Change_Dir()
  727. {
  728.  struct FileInfoBlock *fib;
  729.  struct FileLock *lock, *oldlock, *Oldlock;
  730.  int success;
  731.  
  732.  fib=(struct FileInfoBlock *)AllocMem(sizeof(struct FileInfoBlock),MEMF_CLEAR);
  733.  lock = Lock(DIRB,ACCESS_READ);
  734.  if(lock)
  735.    {
  736.     oldlock = CurrentDir(lock);
  737.     sprintf(line,"%s >RAM:SHELL",CLI);
  738.     success = Execute(line,0,0);
  739.     Oldlock = CurrentDir(oldlock);
  740.     UnLock(lock);
  741.    }
  742.  if(fib) FreeMem(fib,sizeof(struct FileInfoBlock));
  743. }
  744.  
  745. void Get_Files()
  746. {
  747.  f=0; 
  748.  strcpy(filename[f],".");
  749.  while(strcmp(filename[f],"")!=0 && f<=19)
  750.  {
  751.   f++;
  752.   sprintf(filenum,"FileSpec(%d): ",f);
  753.   sm("",1);
  754.   pm(filenum,line,30);
  755.   strcpy(filename[f],line);
  756.   Check_File();
  757.  }
  758.  if(f==20) sm("Maximum Batch Files Reached!",1);
  759. }
  760.  
  761. void Check_File()
  762. {
  763.  Upper(filename[f]);
  764.  LastPos("/",filename[f]);
  765.  if(j==0) LastPos(":",filename[f]);
  766.  if(j!=0)
  767.    {
  768.     r=0;
  769.     for(i=j; i<=l; i++)
  770.        {
  771.         line[r]=filename[f][i];
  772.         r++;
  773.        }
  774.        line[r]='\0';
  775.    }
  776.    else strcpy(line,filename[f]);
  777.  
  778.  fi=fopen("DOORS:SHELL/SHELL-DZ_NOT","r");
  779.  if(fi!=0)
  780.    {
  781.     while(fgets(image,200,fi)!=NULL)
  782.     {
  783.      sr(image); Upper(image);
  784.      if(strcmp(image,"#?")==0)
  785.        {
  786.         LastPos(image,line);
  787.         if(j!=0)
  788.           {
  789.            fclose(fi); 
  790.            f--;
  791.            return;
  792.           }
  793.        }
  794.    
  795.      if(strcmp(image,line)==0) 
  796.        {
  797.         fclose(fi);
  798.         f--;
  799.         return;
  800.        }
  801.     }
  802.     fclose(fi);
  803.     if(strcmp(filename[f],"")==0) return;
  804.     fi=fopen(filename[f],"r");
  805.     if(fi==0)
  806.       {
  807.        sm("",1);
  808.        sm("File Does NOT Exist!",1);
  809.        f--;
  810.        return;
  811.       }
  812.     fclose(fi);
  813.  
  814.     Ok=0;
  815.     for(i=1; i<f; i++)
  816.     {
  817.      if(strcmp(filename[f],filename[i])==0)
  818.        {
  819.         sm("",1);
  820.         sm("File Already Flagged For Downloading!",1);
  821.         i=f; Ok=1;
  822.        }
  823.     }
  824.     if(Ok==1) f--;
  825.     return;    
  826.    }    
  827. }
  828.  
  829. void List_Files()
  830. {
  831.  if(strcmp(filename[1],"")!=0)
  832.    {
  833.     if(strcmp(filename[f],"")==0) f--;
  834.     sm("",1);
  835.     sm("Preparing...",0);
  836.     sm("",0);
  837.     sm(filename[1],0);
  838.     sm("",1);
  839.     for(i=2; i<=f; i++)
  840.     { 
  841.      sm("            ",0);
  842.      sm(filename[i],0);
  843.      sm("",1);
  844.     }
  845.     sm("",1);
  846.    }
  847. }
  848.  
  849. void Download_Files()
  850. {
  851.  if(strcmp(filename[1],"")!=0)
  852.    {
  853.     sm("Press ENTER to Begin Zmodem Download: ",0);
  854.     pm("",image,2);
  855.     for(i=1; i<=f; i++)
  856.     {
  857.      sm("",1);
  858.      sprintf(line,"Sending file %s",filename[i]);
  859.      sm(line,1);
  860.      pu(filename[i],ZMODEMSEND);
  861.     }
  862.    }
  863. }
  864.  
  865. void Get_Code()
  866. {
  867.  codea[0]=36^4;
  868.  codea[1]=39^7;
  869.  codea[2]=42^10;
  870.  codea[3]=45^13;
  871.  codea[4]=48^16;
  872.  codea[5]=51^19;
  873.  codea[6]=54^22;
  874.  codea[7]=57^25;
  875.  codea[8]=60^28;
  876.  codea[9]=4^31;
  877.  codea[10]=121^34;
  878.  codea[11]=22^37;
  879.  codea[12]=25^40;
  880.  codea[13]=70^43;
  881.  codea[14]=125^46;
  882.  codea[15]=89^49;
  883.  codea[16]=81^52;
  884.  codea[17]=91^55;
  885.  codea[18]=86^58;
  886.  codea[19]=29^61;
  887.  codea[20]=54^64;
  888.  codea[21]=112^67;
  889.  codea[22]=104^70;
  890.  codea[23]=121^73;
  891.  codea[24]=45^76;
  892.  codea[25]=84^79;
  893.  codea[26]=9^82;
  894.  codea[27]=101^85;
  895.  codea[28]=53^88;
  896.  codea[29]=123^91;
  897.  codea[30]=28^94;
  898.  codea[31]=24^97;
  899.  codea[32]=94^100;
  900.  codea[33]=71^103;
  901.  codea[34]=113^106;
  902.  codea[35]=54^109;
  903.  codea[36]=67^112;
  904.  codea[37]=69^115;
  905.  codea[38]=77^118;
  906.  codea[39]=77^121;
  907.  codea[40]=72^124;
  908.  codea[41]=18^127;
  909.  codea[42]=-83^130;
  910.  codea[43]=-35^133;
  911.  codea[44]=-44^136;
  912.  codea[45]=-112^139;
  913.  codea[46]=-43^142;
  914.  codea[47]=-91^145;
  915.  codea[48]=-92^148;
  916.  codea[49]=-6^151;
  917.  codea[50]=-5^154;
  918.  codea[51]=-15^157;
  919.  codea[52]=-44^160;
  920.  codea[53]=-58^163;
  921.  codea[54]=-43^166;
  922.  codea[55]=-52^169;
  923.  codea[56]=-116^172;
  924.  codea[57]=-23^175;
  925.  codea[58]=-45^178;
  926.  codea[59]=-39^181;
  927.  codea[60]=-37^184;
  928.  codea[61]=-44^187;
  929.  codea[62]=-48^190;
  930.  codea[63]=-31^193;
  931.  codea[64]=-28^196;
  932.  codea[65]=-36^199;
  933.  codea[66]=-111^202;
  934.  codea[67]=-2^205;
  935.  codea[68]=-30^208;
  936.  codea[69]=-66^211;
  937.  codea[70]=125^214;
  938.  codea[71]=114^217;
  939.  codea[72]=119^220;
  940.  codea[73]=-1^223;
  941.  codea[74]=-7^226;
  942.  codea[75]=-66^229;
  943.  codea[76]=-39^232;
  944.  codea[77]=-48^235;
  945.  codea[78]=-35^238;
  946.  codea[79]=-58^241;
  947.  codea[80]=-103^244;
  948.  codea[81]=-40^247;
  949.  codea[82]=-94^250;
  950.  codea[83]=-35^253;
  951.  codea[84]=27^256;
  952.  codea[85]=88^259;
  953.  codea[86]=54^262;
  954.  codea[87]=50^265;
  955.  codea[88]=63^268;
  956.  codea[89]=60^271;
  957.  codea[90]=127^274;
  958.  codea[91]=81^277;
  959.  codea[92]=125^280;
  960.  codea[93]=109^283;
  961.  codea[94]=123^286;
  962.  codea[95]=77^289;
  963.  codea[96]=75^292;
  964.  codea[97]=87^295;
  965.  codea[98]=71^298;
  966.  codea[99]=72^301;
  967.  codea[100]=94^304;
  968.  codea[101]=71^307;
  969.  codea[102]=22^310;
  970.  codea[103]=109^313;
  971.  codea[104]=89^316;
  972.  codea[105]=94^319;
  973.  codea[106]=47^322;
  974.  codea[107]=101^325;
  975.  codea[108]=83^328;
  976.  codea[109]=16^331;
  977.  codea[110]=125^334;
  978.  codea[111]=99^337;
  979.  codea[112]=57^340;
  980.  codea[113]=-20^343;
  981.  codea[114]=-31^346;
  982.  
  983.  codeb[0]=40^8;
  984.  codeb[1]=47^15;
  985.  codeb[2]=54^22;
  986.  codeb[3]=61^29;
  987.  codeb[4]=4^36;
  988.  codeb[5]=11^43;
  989.  codeb[6]=18^50;
  990.  codeb[7]=25^57;
  991.  codeb[8]=96^64;
  992.  codeb[9]=92^71;
  993.  codeb[10]=21^78;
  994.  codeb[11]=102^85;
  995.  codeb[12]=105^92;
  996.  codeb[13]=14^99;
  997.  codeb[14]=20^106;
  998.  codeb[15]=15^113;
  999.  codeb[16]=6^120;
  1000.  codeb[17]=1^127;
  1001.  codeb[18]=-8^134;
  1002.  codeb[19]=-13^141;
  1003.  codeb[20]=-22^148;
  1004.  codeb[21]=-27^155;
  1005.  codeb[22]=-36^162;
  1006.  codeb[23]=-41^169;
  1007.  codeb[24]=-50^176;
  1008.  codeb[25]=-55^183;
  1009.  codeb[26]=-64^190;
  1010.  codeb[27]=-69^197;
  1011.  codeb[28]=-78^204;
  1012.  codeb[29]=-83^211;
  1013.  codeb[30]=-92^218;
  1014.  codeb[31]=-97^225;
  1015.  codeb[32]=-106^232;
  1016.  codeb[33]=-111^239;
  1017.  codeb[34]=-120^246;
  1018.  codeb[35]=-125^253;
  1019.  codeb[36]=122^260;
  1020.  codeb[37]=117^267;
  1021.  codeb[38]=108^274;
  1022.  codeb[39]=103^281;
  1023.  codeb[40]=94^288;
  1024.  codeb[41]=89^295;
  1025.  codeb[42]=80^302;
  1026.  codeb[43]=75^309;
  1027.  codeb[44]=66^316;
  1028.  codeb[45]=61^323;
  1029.  codeb[46]=52^330;
  1030.  codeb[47]=47^337;
  1031.  codeb[48]=38^344;
  1032.  codeb[49]=33^351;
  1033.  codeb[50]=24^358;
  1034.  codeb[51]=19^365;
  1035.  codeb[52]=10^372;
  1036.  codeb[53]=5^379;
  1037.  codeb[54]=-4^386;
  1038.  codeb[55]=-9^393;
  1039.  codeb[56]=-18^400;
  1040.  codeb[57]=-23^407;
  1041.  codeb[58]=-32^414;
  1042.  codeb[59]=-37^421;
  1043.  codeb[60]=-46^428;
  1044.  codeb[61]=-51^435;
  1045.  codeb[62]=-60^442;
  1046.  codeb[63]=-65^449;
  1047.  codeb[64]=-74^456;
  1048.  codeb[65]=-79^463;
  1049.  codeb[66]=-88^470;
  1050.  codeb[67]=-93^477;
  1051.  codeb[68]=-102^484;
  1052.  codeb[69]=-107^491;
  1053.  codeb[70]=-116^498;
  1054.  codeb[71]=-121^505;
  1055.  codeb[72]=126^512;
  1056.  codeb[73]=121^519;
  1057.  
  1058.  codec[0]=30^5;
  1059.  codec[1]=82^9;
  1060.  codec[2]=76^13;
  1061.  
  1062.  coded[0]=17^10;
  1063.  coded[1]=72^19;
  1064.  coded[2]=93^28;
  1065.  coded[3]=62^37;
  1066.  coded[4]=117^46;
  1067.  coded[5]=116^55;
  1068.  coded[6]=91^64;
  1069.  coded[7]=18^73;
  1070.  coded[8]=17^82;
  1071.  coded[9]=64^91;
  1072.  coded[10]=63^100;
  1073.  coded[11]=46^109;
  1074.  coded[12]=109^118;
  1075.  coded[13]=36^127;
  1076.  coded[14]=-53^136;
  1077.  coded[15]=-118^145;
  1078.  coded[16]=-63^154;
  1079.  coded[17]=-32^163;
  1080.  coded[18]=-73^172;
  1081.  coded[19]=-18^181;
  1082.  coded[20]=-3^190;
  1083.  coded[21]=-36^199;
  1084.  coded[22]=-117^208;
  1085.  coded[23]=-102^217;
  1086.  coded[24]=-7^226;
  1087.  coded[25]=-80^235;
  1088.  coded[26]=-73^244;
  1089.  coded[27]=-26^253;
  1090.  coded[28]=93^262;
  1091.  coded[29]=76^271;
  1092.  coded[30]=3^280;
  1093.  coded[31]=122^289;
  1094.  coded[32]=105^298;
  1095.  coded[33]=40^307;
  1096.  coded[34]=103^316;
  1097.  coded[35]=6^325;
  1098.  coded[36]=85^334;
  1099.  coded[37]=12^343;
  1100.  coded[38]=35^352;
  1101.  coded[39]=114^361;
  1102.  coded[40]=41^370;
  1103.  coded[41]=56^379;
  1104.  coded[42]=-97^388;
  1105.  coded[43]=-42^397;
  1106.  coded[44]=-43^406;
  1107.  coded[45]=-124^415;
  1108.  coded[46]=-13^424;
  1109.  coded[47]=-14^433;
  1110.  coded[48]=-95^442;
  1111.  coded[49]=-104^451;
  1112.  coded[50]=-113^460;
  1113.  coded[51]=-50^469;
  1114.  coded[52]=-123^478;
  1115.  coded[53]=-92^487;
  1116.  coded[54]=-21^496;
  1117.  coded[55]=-94^505;
  1118.  coded[56]=65^514;
  1119.  coded[57]=16^523;
  1120.  coded[58]=79^532;
  1121.  coded[59]=94^541;
  1122.  coded[60]=61^550;
  1123.  coded[61]=116^559;
  1124.  coded[62]=123^568;
  1125.  coded[63]=90^577;
  1126.  coded[64]=17^586;
  1127.  coded[65]=16^595;
  1128.  coded[66]=71^604;
  1129.  coded[67]=62^613;
  1130.  coded[68]=45^622;
  1131.  coded[69]=108^631;
  1132.  coded[70]=-37^640;
  1133.  coded[71]=-54^649;
  1134.  coded[72]=-119^658;
  1135.  coded[73]=-64^667;
  1136.  coded[74]=-25^676;
  1137.  coded[75]=-74^685;
  1138.  coded[76]=-19^694;
  1139.  coded[77]=-4^703;
  1140.  coded[78]=-45^712;
  1141.  coded[79]=-118^721;
  1142.  coded[80]=-18^730;
  1143.  coded[81]=-41^739;
  1144.  coded[82]=-127^748;
  1145.  coded[83]=-43^757;
  1146.  coded[84]=-27^766;
  1147.  coded[85]=92^775;
  1148.  coded[86]=36^784;
  1149.  coded[87]=41^793;
  1150.  coded[88]=79^802;
  1151.  coded[89]=48^811;
  1152.  coded[90]=111^820;
  1153.  coded[91]=126^829;
  1154.  coded[92]=93^838;
  1155.  coded[93]=20^847;
  1156.  coded[94]=108^856;
  1157.  coded[95]=85^865;
  1158.  coded[96]=7^874;
  1159.  coded[97]=83^883;
  1160.  coded[98]=103^892;
  1161.  coded[99]=-34^901;
  1162.  coded[100]=-70^910;
  1163.  coded[101]=-89^919;
  1164.  coded[102]=-51^928;
  1165.  
  1166.  codee[0]=28^7;
  1167.  codee[1]=86^13;
  1168.  codee[2]=82^19;
  1169.  codee[3]=2^25;
  1170.  codee[4]=68^31;
  1171.  codee[5]=100^37;
  1172.  codee[6]=48^43;
  1173.  codee[7]=106^49;
  1174.  codee[8]=116^55;
  1175.  codee[9]=38^61;
  1176.  codee[10]=24^67;
  1177.  codee[11]=10^73;
  1178.  codee[12]=84^79;
  1179.  codee[13]=14^85;
  1180.  codee[14]=24^91;
  1181.  codee[15]=122^97;
  1182.  codee[16]=60^103;
  1183.  codee[17]=46^109;
  1184.  codee[18]=104^115;
  1185.  codee[19]=34^121;
  1186.  codee[20]=60^127;
  1187.  codee[21]=-98^133;
  1188.  codee[22]=-48^139;
  1189.  codee[23]=-46^145;
  1190.  codee[24]=-116^151;
  1191.  codee[25]=-58^157;
  1192.  codee[26]=-32^163;
  1193.  codee[27]=-78^169;
  1194.  codee[28]=-12^175;
  1195.  codee[29]=-10^181;
  1196.  codee[30]=-96^187;
  1197.  codee[31]=-102^193;
  1198.  codee[32]=-124^199;
  1199.  codee[33]=-42^205;
  1200.  codee[34]=-120^211;
  1201.  codee[35]=-102^217;
  1202.  codee[36]=-60^223;
  1203.  codee[37]=-66^229;
  1204.  codee[38]=-88^235;
  1205.  codee[39]=-22^241;
  1206.  codee[40]=-84^247;
  1207.  codee[41]=-66^253;
  1208.  codee[42]=24^259;
  1209.  codee[43]=82^265;
  1210.  codee[44]=76^271;
  1211.  codee[45]=14^277;
  1212.  codee[46]=64^283;
  1213.  codee[47]=98^289;
  1214.  codee[48]=60^295;
  1215.  codee[49]=118^301;
  1216.  codee[50]=112^307;
  1217.  codee[51]=34^313;
  1218.  codee[52]=100^319;
  1219.  codee[53]=6^325;
  1220.  codee[54]=80^331;
  1221.  codee[55]=10^337;
  1222.  codee[56]=20^343;
  1223.  codee[57]=70^349;
  1224.  codee[58]=56^355;
  1225.  codee[59]=42^361;
  1226.  codee[60]=116^367;
  1227.  codee[61]=46^373;
  1228.  codee[62]=56^379;
  1229.  codee[63]=-102^385;
  1230.  codee[64]=-36^391;
  1231.  codee[65]=-50^397;
  1232.  codee[66]=-120^403;
  1233.  codee[67]=-62^409;
  1234.  codee[68]=-36^415;
  1235.  codee[69]=-66^421;
  1236.  codee[70]=-16^427;
  1237.  codee[71]=-14^433;
  1238.  codee[72]=-84^439;
  1239.  codee[73]=-26^445;
  1240.  codee[74]=-128^451;
  1241.  codee[75]=-46^457;
  1242.  codee[76]=-108^463;
  1243.  codee[77]=-106^469;
  1244.  codee[78]=-64^475;
  1245.  codee[79]=-70^481;
  1246.  codee[80]=-92^487;
  1247.  codee[81]=-10^493;
  1248.  codee[82]=-88^499;
  1249.  codee[83]=-54^505;
  1250.  codee[84]=-55^511;
  1251.  codee[85]=104^517;
  1252.  codee[86]=87^523;
  1253.  codee[87]=10^529;
  1254.  codee[88]=76^535;
  1255.  codee[89]=41^541;
  1256.  codee[90]=19^547;
  1257.  codee[91]=68^553;
  1258.  codee[92]=52^559;
  1259.  codee[93]=110^565;
  1260.  codee[94]=120^571;
  1261.  codee[95]=90^577;
  1262.  codee[96]=28^583;
  1263.  codee[97]=126^589;
  1264.  codee[98]=101^595;
  1265.  codee[99]=52^601;
  1266.  codee[100]=112^607;
  1267.  codee[101]=126^613;
  1268.  codee[102]=48^619;
  1269.  codee[103]=69^625;
  1270.  codee[104]=71^631;
  1271.  codee[105]=16^637;
  1272.  
  1273.  codef[0]=24^3;
  1274.  codef[1]=94^5;
  1275.  codef[2]=70^7;
  1276.  codef[3]=18^9;
  1277.  codef[4]=80^11;
  1278.  codef[5]=78^13;
  1279.  codef[6]=20^15;
  1280.  codef[7]=74^17;
  1281.  codef[8]=80^19;
  1282.  codef[9]=14^21;
  1283.  codef[10]=76^23;
  1284.  codef[11]=90^25;
  1285.  codef[12]=0^27;
  1286.  codef[13]=70^29;
  1287.  codef[14]=92^31;
  1288.  codef[15]=58^33;
  1289.  codef[16]=120^35;
  1290.  codef[17]=102^37;
  1291.  codef[18]=60^39;
  1292.  codef[19]=114^41;
  1293.  codef[20]=104^43;
  1294.  codef[21]=54^45;
  1295.  codef[22]=116^47;
  1296.  codef[23]=114^49;
  1297.  codef[24]=40^51;
  1298.  codef[25]=110^53;
  1299.  codef[26]=116^55;
  1300.  codef[27]=34^57;
  1301.  codef[28]=96^59;
  1302.  codef[29]=126^61;
  1303.  codef[30]=36^63;
  1304.  codef[31]=26^65;
  1305.  codef[32]=0^67;
  1306.  codef[33]=94^69;
  1307.  codef[34]=28^71;
  1308.  codef[35]=10^73;
  1309.  codef[36]=80^75;
  1310.  codef[37]=22^77;
  1311.  codef[38]=12^79;
  1312.  codef[39]=74^81;
  1313.  codef[40]=8^83;
  1314.  codef[41]=22^85;
  1315.  codef[42]=76^87;
  1316.  codef[43]=2^89;
  1317.  codef[44]=24^91;
  1318.  codef[45]=70^93;
  1319.  codef[46]=4^95;
  1320.  codef[47]=34^97;
  1321.  codef[48]=120^99;
  1322.  codef[49]=62^101;
  1323.  codef[50]=36^103;
  1324.  codef[51]=114^105;
  1325.  codef[52]=48^107;
  1326.  codef[53]=46^109;
  1327.  codef[54]=116^111;
  1328.  codef[55]=42^113;
  1329.  codef[56]=48^115;
  1330.  codef[57]=110^117;
  1331.  codef[58]=44^119;
  1332.  codef[59]=58^121;
  1333.  codef[60]=96^123;
  1334.  codef[61]=38^125;
  1335.  codef[62]=60^127;
  1336.  codef[63]=-102^129;
  1337.  codef[64]=-40^131;
  1338.  codef[65]=-58^133;
  1339.  codef[66]=-100^135;
  1340.  codef[67]=-46^137;
  1341.  codef[68]=-56^139;
  1342.  codef[69]=-106^141;
  1343.  codef[70]=-44^143;
  1344.  codef[71]=-46^145;
  1345.  codef[72]=-120^147;
  1346.  codef[73]=-50^149;
  1347.  codef[74]=-44^151;
  1348.  codef[75]=-126^153;
  1349.  codef[76]=-64^155;
  1350.  codef[77]=-34^157;
  1351.  codef[78]=-124^159;
  1352.  codef[79]=-6^161;
  1353.  codef[80]=-112^163;
  1354.  codef[81]=-109^165;
  1355.  codef[82]=-54^167;
  1356.  codef[83]=-119^169;
  1357.  codef[84]=-80^171;
  1358.  codef[85]=-10^173;
  1359.  codef[86]=-101^175;
  1360.  codef[87]=-127^177;
  1361.  codef[88]=-34^179;
  1362.  codef[89]=-82^181;
  1363.  codef[90]=-20^183;
  1364.  codef[91]=-6^185;
  1365.  codef[92]=-96^187;
  1366.  codef[93]=-26^189;
  1367.  codef[94]=-116^191;
  1368.  codef[95]=-9^193;
  1369.  codef[96]=-82^195;
  1370.  codef[97]=-27^197;
  1371.  codef[98]=-36^199;
  1372.  codef[99]=-110^201;
  1373.  codef[100]=-1^203;
  1374.  codef[101]=-3^205;
  1375.  codef[102]=-94^207;
  1376.  
  1377.  codeg[0]=18^9;
  1378.  codeg[1]=74^17;
  1379.  codeg[2]=90^25;
  1380.  codeg[3]=58^33;
  1381.  codeg[4]=114^41;
  1382.  codeg[5]=114^49;
  1383.  codeg[6]=34^57;
  1384.  codeg[7]=26^65;
  1385.  codeg[8]=10^73;
  1386.  codeg[9]=74^81;
  1387.  codeg[10]=2^89;
  1388.  codeg[11]=34^97;
  1389.  codeg[12]=114^105;
  1390.  codeg[13]=42^113;
  1391.  codeg[14]=58^121;
  1392.  codeg[15]=-102^129;
  1393.  codeg[16]=-46^137;
  1394.  codeg[17]=-46^145;
  1395.  codeg[18]=-126^153;
  1396.  codeg[19]=-6^161;
  1397.  codeg[20]=-22^169;
  1398.  codeg[21]=-86^177;
  1399.  codeg[22]=-30^185;
  1400.  codeg[23]=-126^193;
  1401.  codeg[24]=-46^201;
  1402.  codeg[25]=-118^209;
  1403.  codeg[26]=-102^217;
  1404.  codeg[27]=-6^225;
  1405.  codeg[28]=-78^233;
  1406.  codeg[29]=-78^241;
  1407.  codeg[30]=-30^249;
  1408.  codeg[31]=90^257;
  1409.  codeg[32]=74^265;
  1410.  codeg[33]=10^273;
  1411.  codeg[34]=66^281;
  1412.  codeg[35]=98^289;
  1413.  codeg[36]=50^297;
  1414.  codeg[37]=106^305;
  1415.  codeg[38]=122^313;
  1416.  codeg[39]=90^321;
  1417.  codeg[40]=18^329;
  1418.  codeg[41]=18^337;
  1419.  codeg[42]=66^345;
  1420.  codeg[43]=58^353;
  1421.  codeg[44]=42^361;
  1422.  codeg[45]=106^369;
  1423.  codeg[46]=34^377;
  1424.  codeg[47]=-62^385;
  1425.  codeg[48]=-110^393;
  1426.  codeg[49]=-54^401;
  1427.  codeg[50]=-38^409;
  1428.  codeg[51]=-70^417;
  1429.  codeg[52]=-14^425;
  1430.  codeg[53]=-14^433;
  1431.  codeg[54]=-94^441;
  1432.  codeg[55]=-102^449;
  1433.  codeg[56]=-118^457;
  1434.  codeg[57]=-54^465;
  1435.  codeg[58]=-126^473;
  1436.  codeg[59]=-94^481;
  1437.  codeg[60]=-14^489;
  1438.  codeg[61]=-86^497;
  1439.  codeg[62]=-70^505;
  1440.  codeg[63]=26^513;
  1441.  codeg[64]=82^521;
  1442.  codeg[65]=82^529;
  1443.  codeg[66]=2^537;
  1444.  codeg[67]=122^545;
  1445.  codeg[68]=106^553;
  1446.  codeg[69]=42^561;
  1447.  codeg[70]=98^569;
  1448.  codeg[71]=2^577;
  1449.  codeg[72]=82^585;
  1450.  codeg[73]=10^593;
  1451.  codeg[74]=26^601;
  1452.  codeg[75]=122^609;
  1453.  codeg[76]=50^617;
  1454.  codeg[77]=69^625;
  1455.  codeg[78]=77^633;
  1456.  codeg[79]=-20^641;
  1457.  codeg[80]=-90^649;
  1458.  codeg[81]=-118^657;
  1459.  codeg[82]=-62^665;
  1460.  codeg[83]=-107^673;
  1461.  codeg[84]=-103^681;
  1462.  codeg[85]=-36^689;
  1463.  codeg[86]=-94^697;
  1464.  codeg[87]=-102^705;
  1465.  codeg[88]=-118^713;
  1466.  codeg[89]=-54^721;
  1467.  codeg[90]=-126^729;
  1468.  codeg[91]=-43^737;
  1469.  codeg[92]=-35^745;
  1470.  codeg[93]=-100^753;
  1471.  codeg[94]=-91^761;
  1472.  codeg[95]=26^769;
  1473.  codeg[96]=82^777;
  1474.  codeg[97]=37^785;
  1475.  codeg[98]=41^793;
  1476.  codeg[99]=76^801;
  1477. }
  1478.  
  1479. BstrC(BSTR *bstr,UBYTE *buf)
  1480. {
  1481.  UBYTE *str;
  1482.  LONG loop,counter;
  1483.  
  1484.   counter=0;
  1485.   str = (UBYTE*) BADDR(bstr);
  1486.   for(loop=(LONG)str[0]; loop--; ++counter)
  1487.   {
  1488.    buf[counter] = str[counter+1];
  1489.   }
  1490.   buf[counter]='\0';
  1491. }
  1492.  
  1493. STRPTR BstrOut(BSTR *bstr)
  1494. {
  1495.  UBYTE buf[200];
  1496.  UBYTE buf2[200];
  1497.  BstrC(bstr,buf);
  1498.  strcpy(buf2,buf);
  1499.  Upper(buf2);
  1500.  return((char *)buf2);
  1501. }
  1502.  
  1503. int FindAssign(char *Path)
  1504. {
  1505.  struct RootNode *rootnode;
  1506.  struct DosInfo *dosinfo;
  1507.  struct DeviceList *devicelist;
  1508.  
  1509.  rootnode = (struct RootNode*) DOSBase->dl_Root;
  1510.  dosinfo  = (struct DosInfo*)  BADDR(rootnode->rn_Info);
  1511.  devicelist = (struct DeviceList*) BADDR(dosinfo->di_DevInfo);
  1512.   while(devicelist->dl_Next)
  1513.   {
  1514.    if(!strncmp((STRPTR)BstrOut(devicelist->dl_Name),Path))
  1515.      {
  1516.       if(strcmp(Path,"RAM")==0) return(1);
  1517.         else if(devicelist->dl_Type!=0) return(1);         
  1518.      }
  1519.    devicelist = (struct DeviceList*) BADDR(devicelist->dl_Next);
  1520.   }
  1521.   return(0);
  1522. }
  1523.  
  1524. void Intro()
  1525. {
  1526.  sm(" p",0); sm(" ",1);
  1527.  sm("",1);
  1528.  sm(codea,1);
  1529.  sm(codeb,1);
  1530.  sm(codec,0);
  1531.  for(i=0; i<=2; i++)
  1532.  {
  1533.   sm(coded,1);
  1534.   sm(codee,1);
  1535.   Delay(5);
  1536.   sm(codef,1);
  1537.   sm(codeg,1);
  1538.   Delay(5);
  1539.  }
  1540.  sm(" p",0); sm(" ",1);
  1541. }
  1542.  
  1543. void Main_Sub()
  1544. {
  1545.  int success;
  1546.  
  1547.  while(strcmp(CLI2,"ENDCLI")!=0 && strcmp(CLI2,"G")!=0)
  1548.  {
  1549.   sm("",1);
  1550.   sprintf(line,"%s> ",DIR);
  1551.   pm(line,CLI,190);
  1552.   if(CLI[0]=='.')
  1553.   {
  1554.     pu(&CLI[1],508);sm("",1); strcpy(CLI2,"");
  1555.     continue;
  1556.   }
  1557.   sr(CLI);
  1558.   if(strcmp(CLI,"")!=0)
  1559.     {
  1560.      Parse_Arg(CLI);
  1561.      sr(CMD); strcpy(CMD2,CMD);
  1562.      sr(EXP);
  1563.      strcpy(UEXP,EXP);
  1564.      Upper(CMD); Upper(UEXP);
  1565.      sprintf(CLI2,"%s %s",CMD,UEXP);
  1566.      sr(CLI2);
  1567.      NO=0;
  1568.      CAN=0;
  1569.      CONLY=0;
  1570.      NOT_Check();
  1571.      CAN_Check();
  1572.  
  1573.      Words(UEXP);
  1574.      for(i=1; i<=w; i++)
  1575.      {
  1576.       Word(UEXP,i);
  1577.       if(strcmp(wrd,">NIL:")==0 || strcmp(wrd,">")==0) {NO=1; i=w;}
  1578.      }
  1579.  
  1580.      Script_Check(CMD);
  1581.      if(SR==1) 
  1582.        {
  1583.         sm("",1);
  1584.         sm("Script Files NOT allowed to be Executed!",1);
  1585.         NO=1;
  1586.        }
  1587.  
  1588.        A=0;
  1589.       DZ=0;
  1590.       RZ=0;
  1591.      COP=0;
  1592.      DEL=0;
  1593.      REN=0;
  1594.      CHD=0;
  1595.      LastPos(":",UEXP);
  1596.      EN=j; 
  1597.  
  1598.      LastPos("/",CMD);
  1599.      if(j==0) LastPos(":",CMD);
  1600.      if(j!=0)
  1601.        {
  1602.         l=strlen(CMD);
  1603.         Right(CMD,l-j);
  1604.         if(strcmp(right,"CD")==0) CHD=1;
  1605.        }
  1606.        else if(strcmp(CMD,"CD")==0) CHD=1;
  1607.      if(strcmp(CMD,"/")==0) CHD=1;
  1608.  
  1609.      if(strcmp(CMD,"CD")==0 && strcmp(UEXP,"/")!=0 && strcmp(UEXP,"")!=0 && CAN==1 && EN==0) 
  1610.        {
  1611.         Words(EXP);
  1612.         if(w>1) {Word(EXP,1); strcpy(line,wrd);}
  1613.           else strcpy(line,EXP);
  1614.         Right(DIRB,1);
  1615.         if(strcmp(right,":")==0) sprintf(TempDir,"%s%s",DIRB,line); 
  1616.         else sprintf(TempDir,"%s/%s",DIRB,line);
  1617.         Dir_Check(TempDir);
  1618.         if(CD==1) Get_Dir(TempDir);
  1619.         else
  1620.             {
  1621.              sm("",1);
  1622.              sm("Directory Does NOT EXIST!",1);
  1623.             } 
  1624.        }
  1625.  
  1626.      if(strcmp(CMD,"CD")==0 && strcmp(UEXP,"/")!=0 && strcmp(UEXP,"")!=0 && CAN==1 && EN!=0) 
  1627.        {
  1628.         Words(EXP);
  1629.         if(w>1) {Word(EXP,1); strcpy(line,wrd);}
  1630.           else strcpy(line,EXP);
  1631.  
  1632.         Dir_Check(line);
  1633.         if(CD==1) Get_Dir(line);
  1634.         else
  1635.             {
  1636.              sm("",1);
  1637.              sm("Directory Does NOT EXIST!",1);
  1638.             } 
  1639.        }
  1640.  
  1641.      if((strcmp(CMD,"CD")==0 && strcmp(UEXP,"/")==0 && CAN==1) || strcmp(CMD,"/")==0)
  1642.        {
  1643.         LastPos("/",DIRB);
  1644.         if(j==0) LastPos(":",DIRB);
  1645.         if(j!=0)
  1646.           {
  1647.            for(i=0; i<j; i++)
  1648.            {
  1649.             DIRB[i]=DIRB[i];
  1650.            }
  1651.            DIRB[i]='\0';
  1652.            Get_Dir(DIRB);
  1653.           }
  1654.        }
  1655.  
  1656.      if(strcmp(CMD,"DZ")==0 || strcmp(CMD,"DS")==0 || strcmp(CMD,"D")==0)
  1657.        {
  1658.         DZ=1;
  1659.         Get_Files(); 
  1660.         List_Files();
  1661.         Download_Files();
  1662.        }
  1663.  
  1664.      if(strcmp(CMD,"RZ")==0 || strcmp(CMD,"RS")==0 || strcmp(CMD,"U")==0)
  1665.        {
  1666.         RZ=1;
  1667.         gu(node,BB_NODEID);
  1668.         sprintf(line,"BBS:Node%s/PlayPen/",node);
  1669.         pu(line,ZMODEMRECEIVE);
  1670.         sm("",1);
  1671.         sprintf(line,"Upload(s) Moved.....BBS:Node%s/PlayPen",node);
  1672.         sm(line,1);
  1673.         fi=fopen("DOORS:SHELL/SHELL-CAN","r");
  1674.         if(fi!=0)
  1675.           {
  1676.            while(fgets(image,200,fi)!=NULL)
  1677.            {
  1678.             sr(image);
  1679.             LastPos("/",image);
  1680.             if(j==0) LastPos(":",image);
  1681.             if(j!=0)
  1682.               {
  1683.                l=strlen(image);
  1684.                Right(image,l-j);
  1685.               }
  1686.               else strcpy(right,image);
  1687.             sprintf(line,"BBS:Node%s/PlayPen/%s",node,right);
  1688.             File_Check(line);
  1689.             if(FI==1)
  1690.               {
  1691.                success = DeleteFile(line);
  1692.                sm("",1);
  1693.                sm("Nice Try...NOT!!!",1);
  1694.                sm("",1);
  1695.                sprintf(line,"File%s DELETED",right);
  1696.                sm(line,1);
  1697.               }
  1698.            }
  1699.            fclose(fi);
  1700.           }
  1701.        }
  1702.  
  1703.      Right(CMD,6);
  1704.      if(strcmp(right,"DELETE")==0) DEL=1;
  1705.      if(DEL==1 && CAN==1 && NO==0 && strcmp(UEXP,"")!=0)
  1706.        {
  1707.         Words(UEXP);
  1708.         for(p=1; p<=w; p++)
  1709.         {
  1710.          Word(UEXP,p);
  1711.          LastPos(":",wrd);
  1712.          if(j!=0)
  1713.            {
  1714.             l=strlen(wrd);
  1715.             Left(wrd,l-j);
  1716.             Dir_Check(wrd);
  1717.             if(Ok==1) NO=1;
  1718.            }
  1719.          l=strlen(wrd);
  1720.          LastPos("/",wrd);
  1721.          if(j==0) LastPos(":",wrd);
  1722.          if(j!=0) Right(wrd,l-j);
  1723.            else strcpy(right,wrd);
  1724.  
  1725.          fi=fopen("DOORS:SHELL/SHELL-DEL_NOT","r");
  1726.          if(fi!=0)
  1727.            {
  1728.             while(fgets(image,200,fi)!=NULL)
  1729.             {
  1730.              sr(image); Upper(image);
  1731.              if(strcmp(right,image)==0) {NO=1; p=w;}
  1732.             }
  1733.             fclose(fi);
  1734.            }
  1735.            else {NO=1; p=w;}
  1736.         }
  1737.         if(NO==0) 
  1738.           {
  1739.            strcpy(password,DELpassword);
  1740.            DEL_REN_Password_Check();
  1741.            Show();
  1742.            success = DeleteFile("RAM:SHELL");
  1743.           }
  1744.        }     
  1745.  
  1746.      Right(CMD,6);
  1747.      if(strcmp(right,"RENAME")==0) REN=1;
  1748.      if(REN==1 && CAN==1 && NO==0 && strcmp(UEXP,"")!=0)
  1749.        {
  1750.         Word(EXP,1);
  1751.         Dir_Check(wrd);
  1752.         if(CD==1)
  1753.           {
  1754.            sm("",1);
  1755.            sm("Directories NOT Allowed to Be Renamed...",1);
  1756.            NO=1;
  1757.           }
  1758.         if(Ok==1) NO=1;
  1759.  
  1760.         Words(UEXP);
  1761.         for(p=1; p<=w; p++)
  1762.         {
  1763.          Word(UEXP,p);
  1764.          LastPos(":",wrd);
  1765.          if(j!=0)
  1766.            {
  1767.             l=strlen(wrd);
  1768.             Left(wrd,l-j);
  1769.             Dir_Check(wrd);
  1770.             if(Ok==1) NO=1;
  1771.            }
  1772.          l=strlen(wrd);
  1773.          LastPos("/",wrd);
  1774.          if(j==0) LastPos(":",wrd);
  1775.          if(j!=0) Right(wrd,l-j);
  1776.            else strcpy(right,wrd);
  1777.  
  1778.          fi=fopen("DOORS:SHELL/SHELL-REN_NOT","r");
  1779.          if(fi!=0)
  1780.            {
  1781.             while(fgets(image,200,fi)!=NULL)
  1782.             {
  1783.              sr(image); Upper(image);
  1784.              if(strcmp(right,image)==0) {NO=1; p=w;}
  1785.             }
  1786.             fclose(fi);
  1787.            }
  1788.            else {NO=1; p=w;}
  1789.         }
  1790.         if(NO==0) 
  1791.           {
  1792.            strcpy(password,RENpassword);
  1793.            DEL_REN_Password_Check();
  1794.            Show();
  1795.            success = DeleteFile("RAM:SHELL");
  1796.           }
  1797.        }  
  1798.  
  1799.      Right(CMD,4);
  1800.      if(strcmp(right,"COPY")==0) COP=1;
  1801.      if(COP==1 && CAN==1 && NO==0 && strcmp(UEXP,"")!=0)
  1802.        {
  1803.         Word(EXP,1);
  1804.         Dir_Check(wrd);
  1805.         if(CD==1)
  1806.           {
  1807.            sm("",1);
  1808.            sm("Directories NOT Allowed to Be Copied...",1);
  1809.            NO=1;
  1810.           }
  1811.         if(Ok==1) NO=1;
  1812.  
  1813.         Words(UEXP);
  1814.         for(p=1; p<=w; p++)
  1815.         {
  1816.          Word(UEXP,p);
  1817.          LastPos(":",wrd);
  1818.          if(j!=0)
  1819.            {
  1820.             l=strlen(wrd);
  1821.             Left(wrd,l-j);
  1822.             Dir_Check(wrd);
  1823.             if(Ok==1) NO=1;
  1824.            }
  1825.          l=strlen(wrd);
  1826.          LastPos("/",wrd);
  1827.          if(j==0) LastPos(":",wrd);
  1828.          if(j!=0) Right(wrd,l-j);
  1829.            else strcpy(right,wrd);
  1830.  
  1831.          fi=fopen("DOORS:SHELL/SHELL-COP_NOT","r");
  1832.          if(fi!=0)
  1833.            {
  1834.             while(fgets(image,200,fi)!=NULL)
  1835.             {
  1836.              sr(image); Upper(image);
  1837.              if(strcmp(right,image)==0) {NO=1; p=w;}
  1838.             }
  1839.             fclose(fi);
  1840.            }
  1841.            else {NO=1; p=w;}
  1842.         }
  1843.         if(NO==0) 
  1844.           {
  1845.            Change_Dir();
  1846.            Show();
  1847.            success = DeleteFile("RAM:SHELL");
  1848.           }
  1849.        }     
  1850.  
  1851.  
  1852.      if(NO==0 && DZ==0 && RZ==0 && REN==0 && DEL==0 && COP==0 && CHD==0 && strcmp(CLI2,"ENDCLI")!=0 && strcmp(CLI2,"G")!=0)
  1853.        {
  1854.         LastPos(":",CMD);
  1855.         if(j==0)
  1856.           {
  1857.            Right(DIRB,1);
  1858.            if(strcmp(right,":")==0) sprintf(line,"%s%s",DIRB,CMD);
  1859.              else sprintf(line,"%s/%s",DIRB,CMD);
  1860.           }
  1861.           else strcpy(line,CLI);
  1862.         File_Check(line);
  1863.         if(FI==1 && CAN==1 & CONLY==0)
  1864.           {
  1865.            Change_Dir();
  1866.            Show();
  1867.            success = DeleteFile("RAM:SHELL");
  1868.            A=1;
  1869.           }
  1870.         sprintf(line,"C:%s",CMD);
  1871.         File_Check(line);
  1872.         if(FI==1 && A==0 && CAN==1 && CONLY==1)
  1873.           {
  1874.            Change_Dir();
  1875.            Show();
  1876.            success = DeleteFile("RAM:SHELL");
  1877.            A=1;
  1878.           }
  1879.         if(A==0)
  1880.           {
  1881.            LastPos(":",CMD); 
  1882.            if(j==0)
  1883.              {
  1884.               Right(DIRB,1);
  1885.               if(strcmp(right,":")==0) sprintf(TempDir,"%s%s",DIRB,CMD); 
  1886.                 else sprintf(TempDir,"%s/%s",DIRB,CMD);
  1887.               Dir_Check(TempDir);
  1888.               if(CD==1) Get_Dir(TempDir);
  1889.              }
  1890.              else
  1891.                  {
  1892.                   Dir_Check(CMD);
  1893.                   if(CD==1) Get_Dir(CMD);
  1894.                  }
  1895.           }
  1896.        }
  1897.     }
  1898.  }
  1899.  if(strcmp(CLI2,"G")==0)
  1900.    {
  1901.     sm("",1);
  1902.     sm("Click...",1);
  1903.    }
  1904.  sm("",1);
  1905.  return;
  1906. }
  1907.  
  1908.